package com.fantastic.web.controller.admin;

import com.fantastic.common.exception.enums.RespStatusInfo;
import com.fantastic.common.result.ResultData;
import com.fantastic.common.utils.MultipartFileUtils;
import com.fantastic.model.pojo.zjs.Account;
import com.fantastic.model.pojo.zjs.User;
import com.fantastic.service.zjs.AuthService;
import com.fantastic.service.zjs.UserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * @author: rxx
 * @since: 2024/5/23 07:50
 * @description: 用户信息表请求控制器
 */
//@ResponseBody和@Controller的结合，标明本类为控制器的同时该类的全部响应都以响应体的形式进行响应
@RestController
@RequestMapping("/user")
public class UserControllerAdmin {

    //自动注入
    @Resource
    private UserService userService;

    /**
     * 使用分页插件后，Dao层和service层返回都要用Page替换原来的list集合
     * 查询用户个人
     * 无条件时是查询全部的分页查询
     * 有条件时是查询条件的分页查询
     *
     * @param user     用户信息对象
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @return
     */
    @GetMapping("/listUsers")
    public ResultData listUsers(User user,
                                @RequestParam(name = "page",
                                        defaultValue = "1") int pageNum,
                                @RequestParam(name = "limit", defaultValue = "9999999") int pageSize) {
        //设置分页逻辑
        PageHelper.startPage(pageNum, pageSize);
        PageInfo<User> pageInfo = new PageInfo<>(userService.listUsers(user));
        return new ResultData(RespStatusInfo.OK, pageInfo);
    }

    /**
     * 查询单个用户
     *
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    public ResultData getUser(Integer userId) {
        return new ResultData(RespStatusInfo.OK, userService.getUser(userId));
    }

    /**
     * 查询单个UserVo信息
     *
     * @param account
     * @return
     */
    @GetMapping("/getUserVo")
    public ResultData getAccountApp(Account account) {
        return new ResultData(RespStatusInfo.OK, userService.getUserVo(account));
    }

    /**
     * 修改用户个人信息 修改积分也可以使用该请求。因为涉及到查询，所以要使用Post请求
     *
     * @param file 头像文件
     * @param user 用户信息对象
     * @return
     */
    @PostMapping("/updateUser")
    public ResultData updateUser(MultipartFile file, User user) {
        return new ResultData(RespStatusInfo.OK, userService.updateUser(file, user));
    }

    /**
     * 删除用户个人信息
     *
     * @param userId
     * @return
     */
    @PostMapping("/deleteUser")
    public ResultData deleteUser(Integer userId) {
        return new ResultData(RespStatusInfo.OK, userService.deleteUser(userId));
    }


}
